package main.java.exception;

import java.util.Stack;

/**
 * @description:    资源池
 * <p>
 *     个对象带有两个“池”：一个用以保存可用资源，一个用以保存已分配资源。当用户请求一份资源时，
 *     ResourcePool对象从“可用资源池”中取出一份资源交出，并将这份资源转移到“已分配资源池”。
 *     当用户释放一份资源时，ResourcePool对象就该将资源从“已分配资源池”放回“可用资源池”。
 *     如果“可用资源池”不能满足用户的请求，ResourcePool对象就创建一份新资源。
 * </p>
 * @author:         cong zhi
 * @createDate:     2022/5/31 8:32
 * @updateUser:     cong zhi
 * @updateDate:     2022/5/31 8:32
 * @updateRemark:   修改内容
 * @version:        v1.0
 */
public class ResourcePool {

    private Stack<Resource> available;

    private Stack<Resource> allocated;

    public Resource getResource() {
        Resource result;
        try {
            result = available.pop();
        } catch (Exception e) {
            result = new Resource();
            allocated.push(result);
            return result;
        }
        result = available.pop();
        allocated.push(result);
        return result;
    }

}
